package com.bjpowenode.java;

import com.sun.org.apache.xpath.internal.SourceTree;
import org.junit.Test;

import java.awt.*;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wuyuecai
 * @create 2021-05-29 21:30
 */
public class LoopTest {
    @Test
    public void test() {
        /*
        打印1-100之间13的倍数，使用for循环

         */
//        System.out.println("1-100之间13的倍数有：");
//        for(int i = 1;i < 100;i++){
//            if(i % 13 == 0){
//                System.out.print(i+"\t");
//            }
//        }
        //打印1-100之间非13的倍数，使用continue语句
        System.out.println("1-100之间非13的倍数有：");
        for (int i = 1; i < 100; i++) {
            if (i % 13 == 0) {
                continue;
            } else {
                System.out.print(i + "\t");
            }
        }
    }

    @Test
    public void test1() {
        int a = 0;
        int c = 0;
        do {
            --c;
            a = a - 1;
        } while (a >= 0);
        System.out.println("c = " + c);
        System.out.println("a = " + a);
//        int b = 3;
//        do{
//            System.out.println(b);
//            b--;
//        }while (b > 1);
//        System.out.println(b);


    }

    /*
    3000米长的绳子，每天减一半。问多少天这个绳子会小于5米？不考虑小数。
     */
    @Test
    public void test2() {
        int day = 0;
        for (int s = 3000; s >= 5; s /= 2) {
            day++;
        }
        System.out.println(day + "天这个绳子会小于5米");
    }

    /*
    一个数如果恰好等于它的因子之和，这个数就称为"完数"。（因子：除去这个数本身的约数）
    找出1000以内的所有完数
     */
    @Test
    public void test3() {
        int sum = 0;
//        int i = 6;
        //第一种方法
//        for (int i = 1; i < 1000; i++) {
////            //1.先求出该数的所有因子
////            for (int j = 1; j <= i/2; j++) {
////                if(i % j == 0){
////                    //2.将所有因子相加和该数比较
////                    sum += j;
////                }
////            }
////            if(i == sum){
////                System.out.println(i);
////            }
////            //每次判断完成把sum值置位零
////            sum = 0;
////        }
        //第二种方法
        int num = 28;
        for (int i = 1; i <= (int) Math.sqrt(num); i++) {
            if (num % i == 0) {
                sum += i;
                if (num != 1) {
                    sum += num / i;
                }
            }
        }
        if (sum - num == num) {
            System.out.println(num);
        }

    }

    /*
    打印九九乘法表
     */
    @Test
    public void test4() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }

    /*
    输入两个正整数m和n，求其最大公约数和最小公倍数
     */
    @Test
    public void test5() {
        int m = 12;
        int n = 28;
        //查找两个数中的最大值最小值
        int max = (m > n) ? m : n;
        int min = (m < n) ? m : n;
        //求最大公约数：思路 拿两个数依次同时取余除以（最小的数--），
        // 如果同时为零那么最大公约数就是被除数
        for (int i = min; i > 0; i--) {
            if (m % i == 0 && n % i == 0) {
                System.out.println(m + " " + n + "最大公约数为" + i);
                break;
            }
        }
        //求最小公倍数：思路 拿（最大的数++一直到m*n)同时取余分别除以两个数,
        //如果同时为零那么最大公约数就是被除数
        for (int i = max; i <= m * n; i++) {
            if (i % m == 0 && i % n == 0) {
                System.out.println(m + " " + n + "最小公倍数为" + i);
                break;
            }
        }
    }

    /*
    求调和级数中从第多少项开始值大于10
调和级数的第n项形式为：1+1/2+1/3+…+1/n
     */
    @Test
    public void test6() {
        double sum = 0;
        int i = 1;
        while (true) {
            sum += 1.0 / i;
            if (sum > 10) {
                System.out.println(sum);
                System.out.println("调和级数中从第" + i + "项开始值大于10");
                break;
            }
            i++;
        }

    }

    /*
    编写程序，打印100-200之间的质数
     */
    @Test
    public void test7() {
        int count = 0;
        System.out.println("1-200之间的质数有：");
        lable:
        for (int i = 1; i < 200; i++) {
            for (int j = 2; j <= (int) Math.sqrt(i); j++) {
                if (i % j == 0) {
                    continue lable;
                }
            }
            if (i != 1) {
                count++;
                System.out.print(i + "\t");
            }
            if (count == 10) {
                System.out.println();
                count = 0;
            }
        }
//        System.out.println((int)Math.sqrt(5));
    }


    @Test
    public void test8() {



    }
}
